home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / jikes / src / scanner.h < prev    next >
C/C++ Source or Header  |  1999-05-14  |  3KB  |  124 lines

  1. // $Id: scanner.h,v 1.3 1999/01/25 20:00:31 shields Exp $
  2. //
  3. // This software is subject to the terms of the IBM Jikes Compiler
  4. // License Agreement available at the following URL:
  5. // http://www.ibm.com/research/jikes.
  6. // Copyright (C) 1996, 1998, International Business Machines Corporation
  7. // and others.  All Rights Reserved.
  8. // You must accept the terms of that agreement to use this software.
  9. //
  10. #ifndef scanner_INCLUDED
  11. #define scanner_INCLUDED
  12.  
  13. #include "config.h"
  14. #include <limits.h>
  15. #include <iostream.h>
  16. #include <string.h>
  17. #include <ctype.h>
  18. #include <stdlib.h>
  19. #include <time.h>
  20. #include "code.h"
  21. #include "javadef.h"
  22. #include "javasym.h"
  23. #include "stream.h"
  24.  
  25. class Control;
  26. class FileSymbol;
  27.  
  28. //
  29. // The Scanner object
  30. //
  31. class Scanner
  32. {
  33. public:
  34.  
  35.     Scanner(Control &);
  36.  
  37.     ~Scanner() { }
  38.  
  39.     void SetUp(FileSymbol *);
  40.     void Scan(FileSymbol *);
  41.  
  42. private:
  43.     Control &control;
  44.  
  45.     LexStream* lex;
  46.     wchar_t *cursor;
  47.  
  48.     void Initialize(FileSymbol *);
  49.     void Scan();
  50.  
  51.     static int (*scan_keyword[13]) (wchar_t *p1);
  52.     static int ScanKeyword0(wchar_t *p1);
  53.     static int ScanKeyword2(wchar_t *p1);
  54.     static int ScanKeyword3(wchar_t *p1);
  55.     static int ScanKeyword4(wchar_t *p1);
  56.     static int ScanKeyword5(wchar_t *p1);
  57.     static int ScanKeyword6(wchar_t *p1);
  58.     static int ScanKeyword7(wchar_t *p1);
  59.     static int ScanKeyword8(wchar_t *p1);
  60.     static int ScanKeyword9(wchar_t *p1);
  61.     static int ScanKeyword10(wchar_t *p1);
  62.     static int ScanKeyword12(wchar_t *p1);
  63.  
  64.     inline void CheckOctalLiteral(wchar_t *, wchar_t *);
  65.     inline void SkipSpaces();
  66.     void ScanSlashComment();
  67.     void ScanStarComment();
  68.  
  69.     class BraceStack
  70.     {
  71.     public:
  72.         void Push(LexStream::TokenIndex brace) { table.Next() = brace; }
  73.         void Pop()                             { if (table.Length() > 0) table.Reset(table.Length() - 1); }
  74.         int  Size()                            { return table.Length(); }
  75.         LexStream::TokenIndex Top()            { return (table.Length() > 0 ? table[table.Length() - 1] : 0); }
  76.  
  77.     private:
  78.         Tuple<LexStream::TokenIndex> table;
  79.     } brace_stack;
  80.  
  81.     void (Scanner::*classify_token[128 + 1])();
  82.  
  83.     void ClassifyCharLiteral();
  84.     void ClassifyStringLiteral();
  85.     void ClassifyIdOrKeyword();
  86.     void ClassifyId();
  87.     void ClassifyNumericLiteral();
  88.     void ClassifyColon();
  89.     void ClassifyPlus();
  90.     void ClassifyMinus();
  91.     void ClassifyStar();
  92.     void ClassifyDocComment();
  93.     void ClassifySlash();
  94.     void ClassifyLess();
  95.     void ClassifyGreater();
  96.     void ClassifyAnd();
  97.     void ClassifyOr();
  98.     void ClassifyXor();
  99.     void ClassifyNot();
  100.     void ClassifyEqual();
  101.     void ClassifyMod();
  102.     void ClassifyPeriod();
  103.     void ClassifySemicolon();
  104.     void ClassifyComma();
  105.     void ClassifyLbrace();
  106.     void ClassifyRbrace();
  107.     void ClassifyLparen();
  108.     void ClassifyRparen();
  109.     void ClassifyLbracket();
  110.     void ClassifyRbracket();
  111.     void ClassifyComplement();
  112.     void ClassifyPound();
  113.     void ClassifyBadToken();
  114.     void ClassifyQuestion();
  115.     void ClassifyEof();
  116.  
  117.     void ClassifyNonAsciiUnicode();
  118. };
  119.  
  120. #endif
  121.  
  122.  
  123.  
  124.